home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / GAS211S2.ZIP / src / gas-211 / include / coff / alpha.h < prev    next >
C/C++ Source or Header  |  1993-05-30  |  6KB  |  184 lines

  1. /* Rudimentary ECOFF support on Alpha machines. 
  2.    This lacks symbol information, normally provided on Alpha OSF systems
  3.    in the files <sym.h> and <symconst.h>.  */
  4.  
  5. /********************** FILE HEADER **********************/
  6.  
  7. struct external_filehdr {
  8.   unsigned char f_magic[2];    /* magic number            */
  9.   unsigned char f_nscns[2];    /* number of sections        */
  10.   unsigned char f_timdat[4];    /* time & date stamp        */
  11.   unsigned char f_symptr[8];    /* file pointer to symtab    */
  12.   unsigned char f_nsyms[4];    /* number of symtab entries    */
  13.   unsigned char f_opthdr[2];    /* sizeof(optional hdr)        */
  14.   unsigned char f_flags[2];    /* flags            */
  15. };
  16.  
  17.  
  18. /* Alpha magic numbers used in filehdr */
  19.  
  20. #define ALPHAMAGIC 0x183
  21.  
  22. #define ECOFFBADMAG(x) (((x).f_magic!=ALPHAMAGIC))
  23.  
  24.  
  25.  
  26. #define    FILHDR    struct external_filehdr
  27. #define    FILHSZ    sizeof(FILHDR)
  28.  
  29. /********************** AOUT "OPTIONAL HEADER" **********************/
  30.  
  31.  
  32. typedef struct external_aouthdr
  33. {
  34.   unsigned char magic[2];    /* type of file                */
  35.   unsigned char    vstamp[2];    /* version stamp            */
  36.   unsigned char    tsize[8];    /* text size in bytes, padded to FW bdry*/
  37.   unsigned char    dsize[8];    /* initialized data "  "        */
  38.   unsigned char    bsize[8];    /* uninitialized data "   "        */
  39.   unsigned char    entry[8];    /* entry pt.                */
  40.   unsigned char text_start[8];    /* base of text used for this file */
  41.   unsigned char data_start[8];    /* base of data used for this file */
  42.   unsigned char bss_start[8];    /* base of bss used for this file */
  43.   unsigned char gprmask[4];    /* ?? */
  44.   unsigned char cprmask[4][8];    /* ?? */
  45.   unsigned char gp_value[4];    /* value for gp register */
  46. } AOUTHDR;
  47.  
  48. /* compute size of a header */
  49.  
  50. #define AOUTSZ (sizeof(AOUTHDR))
  51.  
  52. #define ZMAGIC          0413    /* demand load format, eg normal ld output */
  53.  
  54. /********************** SECTION HEADER **********************/
  55.  
  56. struct external_scnhdr {
  57.   unsigned char    s_name[8];    /* section name            */
  58.   unsigned char    s_paddr[8];    /* physical address, aliased s_nlib */
  59.   unsigned char    s_vaddr[8];    /* virtual address        */
  60.   unsigned char    s_size[8];    /* section size            */
  61.   unsigned char    s_scnptr[8];    /* file ptr to raw data for section */
  62.   unsigned char    s_relptr[8];    /* file ptr to relocation    */
  63.   unsigned char    s_lnnoptr[8];    /* file ptr to line numbers    */
  64.   unsigned char    s_nreloc[2];    /* number of relocation entries    */
  65.   unsigned char    s_nlnno[2];    /* number of line number entries*/
  66.   unsigned char    s_flags[4];    /* flags            */
  67. };
  68.  
  69. #define    SCNHDR    struct external_scnhdr
  70. #define    SCNHSZ    sizeof(SCNHDR)
  71.  
  72. /*
  73.  * names of "special" sections
  74.  */
  75. #define _TEXT   ".text"
  76. #define _DATA   ".data"
  77. #define _BSS    ".bss"
  78. #define _RDATA    ".rdata"
  79. #define _SDATA    ".sdata"
  80. #define _SBSS    ".sbss"
  81. #define _LIT4    ".lit4"
  82. #define _LIT8    ".lit8"
  83. #define _LIB    ".lib"
  84.  
  85. #define DEFAULT_DATA_SECTION_ALIGNMENT 16
  86. #define DEFAULT_BSS_SECTION_ALIGNMENT  16
  87. #define DEFAULT_TEXT_SECTION_ALIGNMENT 16
  88. /* For new sections we havn't heard of before */
  89. #define DEFAULT_SECTION_ALIGNMENT 16
  90.  
  91.  
  92. /* Alpha ECOFF uses some additional section types.  */
  93. #define STYP_RDATA 0x100
  94. #define STYP_SDATA 0x200
  95. #define STYP_SBSS 0x400
  96. #define STYP_LIT8 0x8000000
  97. #define STYP_LIT4 0x10000000
  98.  
  99. /* I don't know when this is used.  */
  100. #define STYP_OTHER_LOAD 0x80000000
  101.  
  102.  
  103. /********************** RELOCATION DIRECTIVES **********************/
  104.  
  105. struct external_reloc {
  106.   unsigned char r_vaddr[8];
  107.   unsigned char r_bits[4];
  108. };
  109.  
  110. #define RELOC struct external_reloc
  111. #define RELSZ 8
  112.  
  113. /* MIPS ECOFF uses a packed 8 byte format for relocs.  These constants
  114.    are used to unpack the r_bits field.  */
  115.  
  116. #define RELOC_BITS0_SYMNDX_SH_LEFT_BIG        16
  117. #define RELOC_BITS0_SYMNDX_SH_LEFT_LITTLE    0
  118.  
  119. #define RELOC_BITS1_SYMNDX_SH_LEFT_BIG        8
  120. #define RELOC_BITS1_SYMNDX_SH_LEFT_LITTLE    8
  121.  
  122. #define RELOC_BITS2_SYMNDX_SH_LEFT_BIG        0
  123. #define RELOC_BITS2_SYMNDX_SH_LEFT_LITTLE    16
  124.  
  125. #define RELOC_BITS3_TYPE_BIG            0x1E
  126. #define RELOC_BITS3_TYPE_SH_BIG            1
  127. #define RELOC_BITS3_TYPE_LITTLE            0x78
  128. #define RELOC_BITS3_TYPE_SH_LITTLE        3
  129.  
  130. #define RELOC_BITS3_EXTERN_BIG            0x01
  131. #define RELOC_BITS3_EXTERN_LITTLE        0x80
  132.  
  133. /* We store the extern field in the r_offset field of a struct
  134.    internal_reloc.  FIXME: Do this more sensibly.  */
  135. #define r_extern r_offset
  136.  
  137. /* If the extern bit is 1, then r_symndx is an index into the external
  138.    symbol table.  If the extern bit is 0, then r_symndx indicates a
  139.    section, and is one of the following values.  */
  140. #define RELOC_SECTION_TEXT    1
  141. #define RELOC_SECTION_RDATA    2
  142. #define RELOC_SECTION_DATA    3
  143. #define RELOC_SECTION_SDATA    4
  144. #define RELOC_SECTION_SBSS    5
  145. #define RELOC_SECTION_BSS    6
  146. #define RELOC_SECTION_INIT    7
  147. #define RELOC_SECTION_LIT8    8
  148. #define RELOC_SECTION_LIT4    9
  149.  
  150. /* The r_type field is one of the following values.  I don't know if
  151.    any other values can appear.  These seem to be all that occur in
  152.    the Ultrix 4.2 libraries.  */
  153. #define ECOFF_R_IGNORE    0
  154. #define ECOFF_R_REFHALF    1
  155. #define ECOFF_R_REFWORD    2
  156. #define ECOFF_R_JMPADDR    3
  157. #define ECOFF_R_REFHI    4
  158. #define ECOFF_R_REFLO    5
  159. #define ECOFF_R_GPREL    6
  160. #define ECOFF_R_LITERAL    7
  161.  
  162. /********************** STABS **********************/
  163.  
  164. /* gcc uses mips-tfile to output type information in special stabs
  165.    entries.  These must match the corresponding definition in
  166.    gcc/config/mips.h.  At some point, these should probably go into a
  167.    shared include file, but currently gcc and gdb do not share any
  168.    directories. */
  169. #define CODE_MASK 0x8F300
  170. #define MIPS_IS_STAB(sym) (((sym)->index & 0xFFF00) == CODE_MASK)
  171. #define MIPS_MARK_STAB(code) ((code)+CODE_MASK)
  172. #define MIPS_UNMARK_STAB(code) ((code)-CODE_MASK)
  173. #define STABS_SYMBOL "@stabs"
  174.  
  175. /********************** COFF **********************/
  176.  
  177. /* gcc also uses mips-tfile to output COFF debugging information.
  178.    These are the values it uses when outputting the .type directive.
  179.    These should also be in a shared include file.  */
  180. #define N_BTMASK    (017)
  181. #define N_TMASK        (060)
  182. #define N_BTSHFT    (4)
  183. #define N_TSHIFT    (2)
  184.